package algorithmExample;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: zhang.rongqing
 * @since: 2019/10/28
 */
//将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。
//
//        比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：
//
//        L   C   I   R
//        E T O E S I I G
//        E   D   H   N
//        之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。
//
//        请你实现这个将字符串进行指定行数变换的函数：
//
//        string convert(string s, int numRows);
//        示例 1:
//
//        输入: s = "LEETCODEISHIRING", numRows = 3
//        输出: "LCIRETOESIIGEDHN"
//        示例 2:
//
//        输入: s = "LEETCODEISHIRING", numRows = 4
//        输出: "LDREOEIIECIHNTSG"
//        解释:
//
//        L     D     R
//        E   O E   I I
//        E C   I H   N
//        T     S     G

public class ZigzagConversion {
    public String convert(String s, int numRows) {
        int length = s.length();
        int rows = 0, cloumns = 0;
        Boolean loopFlag = false;
        String conversionArray[][] = new String[numRows][s.length() / numRows * numRows];
        StringBuilder result = new StringBuilder();
        if (length < numRows) {
            return s;
        }
        for (int i = 0; i < length; i++) {
            char value = s.charAt(i);
            if (rows < numRows && !loopFlag) {
                conversionArray[rows++][cloumns] = String.valueOf(value);
                if (rows == numRows) {
                    rows--;
                    loopFlag = true;
                }
            } else {
                //特殊情况row=1
                if (rows-- <= 0) {
                    rows = 0;
                }

                cloumns++;
                conversionArray[rows][cloumns] = String.valueOf(value);
                if (rows == 0) {
                    loopFlag = false;
                    rows++;
                }
            }
        }
        System.out.println(conversionArray);
        for (int row = 0; row < numRows; row++) {
            for (int cloumn = 0; cloumn < conversionArray[row].length; cloumn++) {
                String value = conversionArray[row][cloumn];
                if ((!"".equals(value)) && null != value) {
                    result.append(conversionArray[row][cloumn]);
                }
            }
        }
        return result.toString();
    }

    public static void main(String[] args) {
//        String convertStr = "LEETCODEISHIRING";
        String convertStr = "ab";
        ZigzagConversion zigzagConversion = new ZigzagConversion();
        System.out.println(zigzagConversion.convert(convertStr, 1));
    }
}
